# -*- coding: utf-8 -*-


#  在Python中创建闭包必须满足的条件：
#
# 必须有一个嵌套函数(函数内部的函数)。   print_msg()
# 嵌套函数必须引用封闭函数中定义的值。    printer()           # 有待确认
# 闭包函数必须返回嵌套函数              another()
#
# 闭包的作用：
# 1.由于闭包用作回调函数，因此它们提供了某种数据隐藏。这有助于我们减少使用全局变量。
# 2.当我们的代码中没有几个函数时，闭包被证明是一种有效的方法。但是如果我们需要很多功能，那就需要使用类（OOP）。


# This is the outer enclosing function
def print_msg(msg):
    # This is the nested function
    def printer(test):
        print(msg)
        print(test)
        return msg                      # 实际return的
    return printer(2)  # this got changed

# Now let's try calling this function.
# Output: Hello
another = print_msg("Hello")
print("11" + another)


# 也可以不传入函数
# This is the outer enclosing function
def print_msg1():
    def printer1():
        print(1)
        # return msg
    return printer1  # this got changed             # 返回了就是闭包

# Now let's try calling this function.
# Output: Hello
another = print_msg1()
another()

#捕捉异常函数 如果某一个text或者resourceId不一定出现，可以在函数前@catch_u2_exception进行捕捉
def catch_u2_exception(func):
    def _deco(*args, **kwargv):
        try:
            func(*args, **kwargv)
        except:
            pass
    return _deco